package com.ruoyi.labdata.service.impl;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.labdata.mapper.LabFileMapper;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.labdata.domain.LabFile;
import com.ruoyi.labdata.service.ILabFileService;

/**
 * 仪器文件Service业务层处理
 * 
 * @author winner pan
 * @date 2022-02-22
 */
@Service
public class LabFileServiceImpl implements ILabFileService {
	@Autowired
	private LabFileMapper labFileMapper;

	/**
	 * 查询仪器文件
	 * 
	 * @param fileId
	 *            仪器文件ID
	 * @return 仪器文件
	 */
	@Override
	public LabFile selectLabFileById(Long fileId) {
		return labFileMapper.selectLabFileById(fileId);
	}

	/**
	 * 查询仪器文件列表
	 * 
	 * @param labFile
	 *            仪器文件
	 * @return 仪器文件
	 */
	@Override
	public List<LabFile> selectLabFileList(LabFile labFile) {
		return labFileMapper.selectLabFileList(labFile);
	}

	/**
	 * 新增仪器文件
	 * 
	 * @param labFile
	 *            仪器文件
	 * @return 结果
	 */
	@Override
	public int insertLabFile(LabFile labFile) {
		return labFileMapper.insertLabFile(labFile);
	}

	/**
	 * 修改仪器文件
	 * 
	 * @param labFile
	 *            仪器文件
	 * @return 结果
	 */
	@Override
	public int updateLabFile(LabFile labFile) {
		return labFileMapper.updateLabFile(labFile);
	}

	/**
	 * 批量删除仪器文件
	 * 
	 * @param fileIds
	 *            需要删除的仪器文件ID
	 * @return 结果
	 */
	@Override
	public int deleteLabFileByIds(Long[] fileIds) {
		return labFileMapper.deleteLabFileByIds(fileIds);
	}

	/**
	 * 删除仪器文件信息
	 * 
	 * @param fileId
	 *            仪器文件ID
	 * @return 结果
	 */
	@Override
	public int deleteLabFileById(Long fileId) {
		return labFileMapper.deleteLabFileById(fileId);
	}

	public void deleteLabFile(Long instrumentationId, String belongType) {
		if(instrumentationId==null){
			throw new RuntimeException("不能获取到文件对应的数据ID");
		}
		LabFile queryFile = new LabFile();
		queryFile.setInstrumentId(instrumentationId);
		queryFile.setBelongType(belongType);
		List<LabFile> labFiles = selectLabFileList(queryFile);
		if (labFiles != null && labFiles.size() > 0) {
			for (LabFile labFile : labFiles) {
				File file = new File(RuoYiConfig.getProfile()
						+ StringUtils.substringAfter(labFile.getFilePath(), Constants.RESOURCE_PREFIX));
				file.deleteOnExit();
				deleteLabFileById(labFile.getFileId());
			}
		}
	}

	public void updateFiles(List<LabFile> labFiles, Long instrumentationId, String belongType) {
		if (labFiles == null) {
			return;
		}
		if(instrumentationId==null){
			throw new RuntimeException("不能获取到文件对应的数据ID");
		}
		for (LabFile labFile : labFiles) {
			if (labFile.getFileId() != null && labFile.getFileId() > 0) {
				if (labFile.getIsDelete() != null && labFile.getIsDelete() == 1) {
					File file = new File(RuoYiConfig.getProfile()
							+ StringUtils.substringAfter(labFile.getFilePath(), Constants.RESOURCE_PREFIX));
					file.deleteOnExit();
					deleteLabFileById(labFile.getFileId());
				}
			} else {
				labFile.setInstrumentId(instrumentationId);
				labFile.setBelongType(belongType);
				insertLabFile(labFile);
			}
		}
	}

	public void insertFiles(List<LabFile> labFiles, Long instrumentationId, String belongType) {
		if (labFiles == null) {
			return;
		}
		if(instrumentationId==null){
			throw new RuntimeException("不能获取到文件对应的数据ID");
		}
		for (LabFile file : labFiles) {
			file.setInstrumentId(instrumentationId);
			file.setBelongType(belongType);
			insertLabFile(file);
		}
	}

	public List<LabFile> getFiles(Long instrumentationId, String belongType) {
		LabFile labFile = new LabFile();
		if(instrumentationId==null){
			return new ArrayList<LabFile>();
		}
		labFile.setInstrumentId(instrumentationId);
		labFile.setBelongType(belongType);
		List<LabFile> labFiles = selectLabFileList(labFile);
		return labFiles;
	}
}
